class game {
	public static clickedScale = hjc.CLICKED_SCALE;
	public static clickedAlpha = hjc.CLICKED_ALPHA;
	public static toggledAlpha = hjc.TOGGLED_ALHPA;
	public static toggledScale = hjc.TOGGLED_SCLAE;
	public static aniDuration = hjc.ANI_DURATION;
	public static stage: egret.Stage;	//舞台[只读]
	public static frameRate: number;	//游戏帧[只读]
	public static width: number;		//游戏逻辑宽
	public static height: number;		//游戏逻辑高
	public static scale: number;		//场景缩小比(≤1)
	public static paddingTB: number;	//上下留边高
	public static paddingLR: number;	//左右留边宽
	public static curScene: hjc.Scene;
	public static topPanel: hjc.Panel;
	public static topDialog: hjc.Dialog;
	public static container: eui.UILayer;
	public static dev: boolean;
	public static test: boolean;
	public static showAll: boolean;
	public static loading: hjc.Loading;
	public static manager: hjc.ManagerOptions;
	public static launch(options: hjc.LaunchOptions): void { hjc.LaunchManager.instance<hjc.LaunchManager>().launch(options); }
	public static menu<M extends hjc.View>(clazz: new () => M): M { return this.manager.view.getMenu(clazz); }
	public static scene<S extends hjc.Scene>(clazz: new () => S): S { return this.manager.view.getScene(clazz); }
	public static panel<P extends hjc.Panel>(clazz: new () => P): P { return this.manager.view.getPanel(clazz); }
	public static dialog<D extends hjc.Dialog>(clazz: new () => D): D { return this.manager.view.getDialog(clazz); }
	public static enter(clazz?: new () => hjc.Scene, ...params: any[]): void { this.manager.view.enterScene(clazz); }
	public static back(): void { this.manager.view.backScene(); }
	public static show(clazz: new () => (hjc.Panel | hjc.Dialog), ...params: any[]): void { this.manager.view.show(clazz, ...params); }
	public static hide(view: hjc.Panel | hjc.Dialog): void { this.manager.view.hideView(view); }
	public static mediator<M extends hjc.Mediator>(clazz: new () => M): M { return this.manager.mediator.get(clazz); }
	public static on(type: string, notified: Function, observer?: any, view?: egret.DisplayObject): void { this._notifier.attach(type, notified, observer, view); }
	public static off(type: string, notified: Function, observer?: any): void { this._notifier.detach(type, notified, observer); }
	public static notify(type: string, data?: any, source?: any): void { this._notifier.dispatch(type, data, source); }
	public static controller<C extends hjc.Controller>(clazz: new () => C): C { return this.manager.controller.get(clazz); }
	public static proxy<P extends hjc.Proxy>(clazz: new () => P): P { return this.manager.proxy.get(clazz); }
	public static claim<T extends hjc.IPoolable>(Type: new (...params: any[]) => T, ...params: any[]): T { return this._pool.claim(Type, ...params); }
	public static free(obj: hjc.IPoolable): void { this._pool.free(obj); }
	public static get timer(): hjc.TimeManager { return this.manager.time; }
	public static get layer(): hjc.LayerManager { return this.manager.layer; }
	public static get theme(): eui.Theme { return egret.getImplementation('eui.Theme') as eui.Theme }
	public static get asset(): hjc.AssetAdapter { return egret.getImplementation('eui.IAssetAdapter') as hjc.AssetAdapter }
	public static get camera(): hjc.Camera { return hjc.Camera.instance<hjc.Camera>(); }
	public static get ws(): hjc.WebSocket { return hjc.WebSocket.instance<hjc.WebSocket>(); }
	//ecs
	public static system<S extends hjc.System>(clazz: new () => S): S { return this.manager.system.get(clazz); }
	public static entity<E extends hjc.Entity>(id: string): E { return this.manager.entity.getById<E>(id); }
	public static entities<E extends hjc.Entity>(clazz?: new () => E): E[] { return this.manager.entity.getAllBy(clazz); }
	public static addIndpComp<C extends hjc.Component>(indpComp: C): C { this.manager.system.addIndpComp(indpComp); return indpComp; }
	//self defined
	private static get _notifier(): hjc.Notifier { return hjc.Notifier.instance<hjc.Notifier>(); }
	private static get _pool(): hjc.PoolManager { return hjc.PoolManager.instance<hjc.PoolManager>(); }
}